﻿using ExcellentProjectPlus.Seguridades.Perfiles;
using AutoMapper;
using ExcellentProjectPlus.Dominio.Seguridades.Entidades;
using Servicios.Seguridad.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;

namespace Servicios.Seguridad.Controllers
{
    public class PerfilesController : ApiController
    {
        #region Propiedades
        IServicioDeGestionDePerfiles _servicioDeGestionDePerfiles;
        #endregion

        #region Constructores
        public PerfilesController(IServicioDeGestionDePerfiles servicioDeGestionDePerfiles)
        {
            _servicioDeGestionDePerfiles = servicioDeGestionDePerfiles;
            Mapper.CreateMap<Perfil, PerfilModel>();
           
        }
        #endregion

        public IHttpActionResult Get()
        {
            return Ok(Mapper.Map<IEnumerable<Perfil>, IEnumerable<PerfilModel>>
                (_servicioDeGestionDePerfiles.ObtenerPerfiles()));
        }

        [ResponseType(typeof(PerfilModel))]
        public IHttpActionResult GetPerfil(int id)
        {
            Perfil perfil = _servicioDeGestionDePerfiles.ObtenerPerfilPorId(id);
            if (perfil == null)
            {
                return NotFound();
            }
            return Ok(Mapper.Map<Perfil, PerfilModel>(perfil));
        }

        [ResponseType(typeof(Perfil))]
        public IHttpActionResult Post(Perfil perfil)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            _servicioDeGestionDePerfiles.AgregarPerfil(perfil);

            return CreatedAtRoute("DefaultApi", new { id = perfil.IdPerfil }, perfil);
        }

        public IHttpActionResult Put(int id, Perfil perfil)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            if (id != perfil.IdPerfil)
            {
                return BadRequest();
            }

            _servicioDeGestionDePerfiles.ModificarPerfil(perfil);

            return StatusCode(HttpStatusCode.NoContent);
        }

        [ResponseType(typeof(Perfil))]
        public IHttpActionResult Delete(int id)
        {
            Perfil perfil = _servicioDeGestionDePerfiles.ObtenerPerfilPorId(id);
            if (perfil == null)
            {
                return NotFound();
            }

            _servicioDeGestionDePerfiles.EliminarPerfil(perfil);

            return Ok(perfil);
        }

        private bool PerfilExists(int id)
        {
            return _servicioDeGestionDePerfiles.ObtenerPerfilPorId(id) != null;
        }
    }
}
